package com.bang.study.day04;

/**
 * @Auther: Bang
 * @Date: 2019/9/16 0016 16:50
 * @Description: 303. 区域和检索 - 数组不可变
 * 给定一个整数数组  nums，求出数组从索引 i 到 j  (i ≤ j) 范围内元素的总和，包含 i,  j 两点。
 *
 * 示例：
 *
 * 给定 nums = [-2, 0, 3, -5, 2, -1]，求和函数为 sumRange()
 *
 * sumRange(0, 2) -> 1
 * sumRange(2, 5) -> -1
 * sumRange(0, 5) -> -3
 * 说明:
 *
 * 你可以假设数组不可变。
 * 会多次调用 sumRange 方法。
 */
public class Solution_303 {

    class NumArray {

        private int[] sum;

        public NumArray(int[] nums) {
            int length = nums.length;
            sum = new int[length + 1];
            for (int i = 0; i < length; i++) {
                sum[i + 1] = sum[i] + nums[i];
            }
        }

        public int sumRange(int i, int j) {
            return sum[j + 1] - sum[i];
        }
    }

    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        NumArray numArray = new Solution_303().new NumArray(arr);
        int i = numArray.sumRange(0, 1);
        System.out.println(i);
    }
}
